@tool
class_name AdditionalEffect_CallMethod
extends AdditionalEffect

## 执行指定节点的方法

#region 属性
@export var node_path:NodePath
@export var method_name:String
@export var method_args:Dictionary[String,Variant]
@export var cancel_method_name:String
@export var cancel_method_args:Dictionary[String,Variant]
#endregion
#region 字段
#endregion
#region 信号
#endregion

#region 基类方法
## 初始化
func init(args:Dictionary = {}):
	if super(args):
		return true
	return false
## 检查能否执行添加效果，默认为true
func can_excute() -> bool:
	return super()
## 执行添加效果
func excute() -> bool:
	if super():
		var node = owner.get_node(node_path)
		if not node:
			return false
		if not method_name or not node.has_method(method_name):
			return false
		node[method_name].callv(method_args.values())
		return true
	else:
		return false
## 取消执行的效果
func cancel_excute() -> bool:
	if super():
		var node = owner.get_node(node_path)
		if not node:
			return false
		if not method_name or not node.has_method(cancel_method_name):
			return false
		node[cancel_method_name].callv(cancel_method_args.values())
		return true
	else:
		return false
#endregion
#region 公共方法
#endregion
#region 私有方法
#endregion
#region 生命周期函数
func _init() -> void:
	if Engine.is_editor_hint():
		resource_local_to_scene = true
#endregion
